iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 8
0
自我挑戰組

TDD - 紅燈,綠燈,重構,30天 TDD之路有你有我系列 第 8

Day8.我們都是獨立的個體!-Codewars_All Unique

  • 分享至 

  • xImage
  •  

今天比較不同啦 終於從7kyu開始哩
雖然好像難度……..差不多XDDDDDD
6kyu就真的會比較難了啦(應該吧
反正就要慢慢來的嘛!!

這一次的題目看起來很有趣,所以就選了這一題了
(才不是因為題目名稱可以取得很吸引人呢!!
蛤?你說題目不吸引人喔….好吧 嗚嗚嗚嗚

https://ithelp.ithome.com.tw/upload/images/20171225/20107209Z3dHUAepmI.png

今天的題目不難,只要把字串中的每一個字元在字串中是獨一無二的就回傳true,否則回傳false。

我們來看看他的範例輸入輸出,也就是他的test code。

https://ithelp.ithome.com.tw/upload/images/20171225/20107209na0ZYEprRX.png

看完範例輸入輸出就可以更清楚知道他要幹嘛了。

今天要特別介紹一下MS TEST 的 Assert.IsFalse和Assert.IsTrue
前幾天都只有用到Assert.AreEqual的方法,所以今天就特別介紹一下他們唄。
好像也沒甚麼好介紹的(被揍

簡單來說
Assert.IsFalse(bool);
Assert. IsTrue(bool);
這兩個的bool回傳是否為true來判斷這一個測試案例是否通過

來舉個會失敗的例子
Assert.IsFalse(true);
Assert.IsTrue(false)

這樣就清楚惹吧?

接下來要拆解需求啦,題目是要求如果全部都是單獨的字元就回傳true,反過來意思就是如果有重複的字元就回傳false。
所以我們要拿字元,然後去跟字串做比較

  1. 取得字元
  2. 比較字串

接下來開始實作吧! 把專案創建好之後,就把第一個測試案例名稱寫出來吧!
我們要從最簡單的第一步開始,老樣子,如果覺得一開始有點卡卡的就可以加入3A原則的註解唷!

接下來就可以寫Code,一開始Test Case中的Code會長這樣

https://ithelp.ithome.com.tw/upload/images/20171225/20107209nVHG8gCF4R.png

而Production Code 就長這樣

https://ithelp.ithome.com.tw/upload/images/20171225/20107209vdiiwdVd1q.png

老樣子,跑個測試,沒過很正常,commit一下

https://ithelp.ithome.com.tw/upload/images/20171225/20107209L7KNSNcbXg.png

接下來把Production Code改一下,用最小步伐讓Test Case Pass吧!

https://ithelp.ithome.com.tw/upload/images/20171225/20107209K0tN2uDTiY.png

接下來跑個測試,PASS!

https://ithelp.ithome.com.tw/upload/images/20171225/20107209y1PkuAKCOF.png

來寫個第二個測試案例唄,這一個測試案例是讓自己不會毛毛的,所以寫了一個會過的測試案例。

https://ithelp.ithome.com.tw/upload/images/20171225/20107209INNlZm0ILJ.png

改完測試案例,Run! Pass!!

https://ithelp.ithome.com.tw/upload/images/20171225/20107209KlcaLrPtv6.png

Pass之後commit,然後回來看一下test code 是否需要重構,理所當然的事需要,所以就改成這個樣子

https://ithelp.ithome.com.tw/upload/images/20171225/20107209Ia2eMR6Wcl.png

接下來想一個一定會fail但是最簡單讓他fail的測試案例吧!

https://ithelp.ithome.com.tw/upload/images/20171225/201072094p6rlTEkxQ.png

接下來跑一下測試吧,一定是紅燈!

https://ithelp.ithome.com.tw/upload/images/20171225/20107209dpN0YOEK4U.png

接下來要思考的是需求面,我只要計算他的字原有沒有重複超過1次,那我就回傳false,因為超過1次就等於出現了2次以上了。
但這一次只考慮到字串長度等於2的時候。

https://ithelp.ithome.com.tw/upload/images/20171225/201072094o8kkhetBZ.png

然後跑個測試 Passs,Commit!

https://ithelp.ithome.com.tw/upload/images/20171225/20107209mMCZJ0zFYE.png

接下來再新增一個測試案例,是2個字元但會回傳true的測試案例

https://ithelp.ithome.com.tw/upload/images/20171225/20107209uR3GnhPfdh.png

新增完之後跑個測試,pass

https://ithelp.ithome.com.tw/upload/images/20171225/20107209lWaUn9l6zd.png

接下來就新增一個一定會fail的測試案例,因為Production Code目前只有取第一個來比較,所以這一次就把測試案例設計成這個樣子。

https://ithelp.ithome.com.tw/upload/images/20171225/20107209NPpoFcCx9J.png

跑個測試,Fail,Commit。

https://ithelp.ithome.com.tw/upload/images/20171225/20107209erPSs6pKHf.png

這一段Production Code需要用迴圈來跑過每一個字串中的字元來做比較,所以就變成這個樣子

https://ithelp.ithome.com.tw/upload/images/20171225/20107209beupetyw8m.png

跑個測試,Pass,Commit

接下來看到for迴圈,代表可以針對他來改看看Linq的語法,於是就變這個樣子。

https://ithelp.ithome.com.tw/upload/images/20171225/20107209C2jMJT5e3T.png

跑個測試,Pass,Commit。

https://ithelp.ithome.com.tw/upload/images/20171225/20107209AUK66rZYIx.png

覺得對Code有信心時就來多寫幾個測試案例吧!!!

https://ithelp.ithome.com.tw/upload/images/20171225/20107209ENzLPDFgUa.png

All Pass之後,再Codewars上提交! Pass!!

https://ithelp.ithome.com.tw/upload/images/20171225/20107209YQVyK7lmuQ.png

通過!
老樣子我最喜歡的部分就是去看看別人寫這題寫得如何XD

https://ithelp.ithome.com.tw/upload/images/20171225/20107209E3rUP3m1yT.png

哦這一次看到的東西是我第一次看到的欸…..原來可以用SequenceEqual來判斷啊…..長知識了

今天的題目也是蠻簡單的,不過也一樣脫離不,寫測試,紅燈,綠燈,然後重構。
明天依然會是7kyu 繼續混文章 不是 我是說 繼續努力

Git url:
https://github.com/SQZ777/Codewars_AllUnique

下一題,明天見!


上一篇
Day7. 找黃金囉!-Codewars_Main in the west
下一篇
Day9. 轉吧轉吧七彩霓虹燈?-Codewars_RotateForAMax
系列文
TDD - 紅燈,綠燈,重構,30天 TDD之路有你有我30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言